#ifndef __BASIC_HEAD__
#define __BASIC_HEAD__

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <ctype.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <errno.h>
#include <assert.h>
#include <sys/ioctl.h>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <dirent.h>
#include <syslog.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>
#include <pthread.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <strings.h>
#include <sys/epoll.h>
#include <shadow.h>
#include <crypt.h>
#include <sys/sendfile.h>
#include <mysql/mysql.h>
#include <memory.h>
#include <l8w8jwt/encode.h>
#include <l8w8jwt/decode.h>


// 检查命令行参数数量是否符合预期
#define ARGS_CHECK(argc, num)                 \
	{                                         \
		if (argc != num)                      \
		{                                     \
			fprintf(stderr, "args error!\n"); \
			exit(-1);                         \
		}                                     \
	}
// 检查返回值是否是错误标记,若是则打印msg和错误信息
#define ERROR_CHECK(ret, num, msg) \
	{                              \
		if (ret == num)            \
		{                          \
			perror(msg);           \
			exit(-1);              \
		}                          \
	}
// 检查基于thread操作的各个函数的返回值
#define THREAD_ERROR_CHECK(ret, msg)                        \
	{                                                       \
		if (ret != 0)                                       \
		{                                                   \
			fprintf(stderr, "%s:%s\n", msg, strerror(ret)); \
			exit(-1);                                       \
		}                                                   \
	}
// 获得数组长度
#define SIZE(a) (int)(sizeof(a) / sizeof(a[0]))

/* #define NETDISK_LOG_INFO(netfd,clientAddr) {syslog(LOG_INFO,"1 client connected,fd = %d, ip = %s, port = %hu\n",netfd,inet_ntoa(clientAddr.sin_addr),ntohs(clientAddr.sin_port));}
#define NETDISK_LOG_ERR(ret,err,msg){       \
    if(ret == err){                         \
        syslog(LOG_ERR,"an error occurred in %s:%s:%d\n",__FILE__,__FUNCTION__,__LINE__);\
        syslog(LOG_ERR,msg);                \
    }   \
}       \ */


#endif
